在 LeetCode 第 242 題「Valid Anagram」中,我們要檢查兩個字串是否為「相同字母異序詞」(Anagram)。兩個字串如果包含相同數量的字母並且字母的排列順序可以不同,那麼它們就是相同字母異序詞。
題目:
給定兩個字串 s
和 t
,我們需要判斷它們是否為相同字母異序詞。相同字母異序詞的定義是,兩個字串使用相同的字元,且每個字元的出現次數也相同。
範例:
輸入: s = "anagram", t = "nagaram"
輸出: true
輸入: s = "rat", t = "car"
輸出: false
要檢查兩個字串是否為相同字母異序詞,我們需要確保兩個字串中每個字元的出現次數都相同。這可以透過以下幾種方法來實現:
先來個排序法。
實作:
class Solution {
public:
bool isAnagram(string s, string t) {
sort(s.begin(), s.end());
sort(t.begin(), t.end());
if (s == t) {
return true;
}
return false;
}
};
另一種字元計數法解法,計算每個字元的出現次數,使用 unordered_map,也可以使用 vector 來存結果。
實作:
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.size() != t.size())
return false;
unordered_map<int, int> map;
for (int i = 0; i < s.size(); i++) {
map[s[i]]++;
map[t[i]]--;
}
for (const auto& m : map) {
if (m.second != 0)
return false;
}
return true;
}
};
小技巧:
map[s[i]]++
跟 --
來判斷次數是否一樣的技巧。